Problem Note 36284: Errors accessing multilabel formats with a large number of labels for a single range
You might receive segmentation violation errors or bus errors when you try to access a multilabel format if the format contains a range with more than 4094 labels.
The SAS® procedures that support multilabel formats are SUMMARY, MEANS, TABULATE, and REPORT.
The limit is 255 labels for a single range.
The only workaround is to reduce the number of labels for the range.
Operating System and Release Information
SAS System | Base SAS | Microsoft® Windows® for 64-Bit Itanium-based Systems | 9 TS M0 | 9.3 TS1M0 |
64-bit Enabled AIX | 9 TS M0 | 9.3 TS1M0 |
64-bit Enabled HP-UX | 9 TS M0 | 9.3 TS1M0 |
64-bit Enabled Solaris | 9 TS M0 | 9.3 TS1M0 |
HP-UX IPF | 9 TS M0 | 9.3 TS1M0 |
OpenVMS Alpha | 9 TS M0 | 9.3 TS1M0 |
Tru64 UNIX | 9 TS M0 | 9.3 TS1M0 |
Linux on Itanium | 9.1 TS1M3 SP2 | 9.3 TS1M0 |
Solaris for x64 | 9.1 TS1M3 SP4 | 9.3 TS1M0 |
Linux for x64 | 9.2 TS1M0 | 9.3 TS1M0 |
OpenVMS on HP Integrity | 9.2 TS1M0 | 9.3 TS1M0 |
*
For software releases that are not yet generally available, the Fixed
Release is the software release in which the problem is planned to be
fixed.
This code will recreate the error. Reducing the counter in the first loop to 4094 will allow the code to run without errors.
data ctrl ;
length start $5 ;
/* changing the upper limit to 4094 avoids the error */
do j=1 to 4095 ;
start='11111' ;
label= ceil(99999*ranuni(0)) ;
fmtname="myfmt" ;
type="c";
hlo='M' ;
output ;
end ;
do j=1 to 300;
label=ceil(99999*ranuni(0)) ;
start= put(ceil(99999*ranuni(0)),z5.) ;
fmtname="myfmt" ;
type="c";
hlo='M' ;
output ;
end ;
run ;
proc format cntlin=ctrl;
run;
data test;
z='30030';
put z $myfmt.;
run;
If a multilabel format is created with more than 4094 labels for a single range, accessing of the format results in segmentation violations or bus errors.
Type: | Problem Note |
Priority: | medium |
Date Modified: | 2011-08-09 12:37:33 |
Date Created: | 2009-06-18 16:53:26 |